package com.practice.dataStructure.stack;

import java.util.HashMap;
import java.util.Stack;


public class Main {

    /**
     * 简单
     * 给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串，判断该字符串是否有效。有效字符串需满足：
     * 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。
     * 比如 "()"、"()[]{}"、"{[]}" 都是有效字符串，而 "(]"、"([)]" 则不是。
     */
    private static boolean isValid(String s){
        HashMap<Character,Character> rules = new HashMap<>();
        rules.put(')','(');
        rules.put('}','{');
        rules.put(']','[');
        Stack<Character> stack = new Stack<>();
        char[] chars = s.toCharArray();
        for (char aChar : chars) {
            if(rules.containsKey(aChar)){
                Character c = stack.empty()?'#':stack.pop();
                if(c==null || !c.equals(rules.get(aChar))){
                    return  false;
                }
            }else{
                stack.add(aChar);
            }
        }
        return stack.isEmpty();
    }


    public static void main(String[] args) {
        System.out.println(isValid("(){}"));
    }
}
